home *** CD-ROM | disk | FTP | other *** search
/ Windows News 2010 Summer - Disc 1 / WN_Ete2010_CD1.iso / Onglet5 / Weezo / Weezo setup.exe / {code_appDir} / www / includes / mobileFunctions.php < prev    next >
PHP Script  |  2010-05-19  |  11KB  |  259 lines

  1. <?php
  2. /**
  3.  * Common functions used by scripts displaying mobile devices pages
  4.  *
  5.  *
  6.  * PHP version 5
  7.  *
  8.  * LICENSE: This source file is subject to version 3.0 of the PHP license
  9.  * that is available through the world-wide-web at the following URI:
  10.  * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
  11.  * the PHP License and are unable to obtain it through the web, please
  12.  * send a note to license@php.net so we can mail you a copy immediately.
  13.  *
  14.  * @category   NA
  15.  * @package    NA
  16.  * @author     Nicolas Bruley / Peer 2 World <contact@weezo.net>
  17.  * @copyright  2005-2008 Nicolas Bruley / Peer 2 World
  18.  * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
  19.  * @version    CVS: $Id:$
  20.  * @link       http://www.weezo.net
  21.  * @since      File available since Release 1.3.0
  22.  */
  23.  
  24. define('IEMOBILE_TOP_CONTROLS_HEIGHT',50);
  25.  
  26. /**
  27.  * @desc Insert header, body and top controls for mobile pages
  28.  *
  29.  * @param array $parameters: array of parameters:
  30.  *             'javascript': javascript code to be embed into <head></head> (without <script> tag
  31.  *             'style': css style to be embed into <head></head> (without <style> tag
  32.  *             'bodyExtraHTML': HTML codeto be embed within <body> tag
  33.  *             'ping': mixed: true/false to include or not a periodic ping to server, 'auto' to include depending on script
  34.  *             'noTopControls': true not to include top header
  35.  *             'topControlsLabel': HTML code to be included into top header label area
  36.  *             'topControlsExtra': HTML code to be included into top header extra area
  37.  *             'title': page title
  38.  *             'noUpdateOrientation': set to indicate orientation update script won't be included
  39.  */
  40. function mfInsertHead($parameters=array()){
  41.     // Asynchronous request: just return XML header
  42.     if(isset($_POST['asyncRequest'])){
  43.         cfAsyncHeader();
  44.         return;
  45.     }
  46.     @header('P3P: policyref="/w3c/p3p.xml",CP="NON COR CURa OUR NOR NAV"');
  47.     @header('Connection: Keep-Alive');
  48.     @header('Keep-Alive: timeout=15, max=2000');
  49.     @header('Proxy-Connection: Keep-Alive');
  50.  
  51.     if(!isset($parameters['ping'])) $parameters['ping']='auto';
  52.  
  53.     // Context (login, menu, resource, view)
  54.     if (isset($parameters['context'])) $context=$parameters['context'];
  55.     elseif($_SERVER['SCRIPT_NAME']=='/login.php') $context='login';
  56.     elseif($_SERVER['SCRIPT_NAME']=='/mainFrame.php'||$_SERVER['SCRIPT_NAME']=='/index.php') $context='menu';
  57.     else $context='resource';
  58.  
  59.     //$isResource=(substr($_SERVER['PHP_SELF'],0,5)=='/res/' && isset($_SESSION['activeResourceId']));
  60.  
  61.     /**
  62.      * HTML Output
  63.      */
  64. ?>
  65. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  66. <html>
  67. <head>
  68. <meta http-equiv="content-type" content="text/html; charset=utf-8">
  69. <?php
  70.     // Insert extra meta tags
  71.     if(cfRGetVar('meta')&&!cfBGetVar('name')=='iPhone')    echo cfRGetVar('meta');
  72.     if(isset($_ENV['meta']))    echo $_ENV['meta'];
  73.     if(cfBGetVar('extraHead')) echo cfBGetVar('extraHead');
  74.  
  75.     // Title
  76.     if(isset($parameters['title'])) $title=$parameters['title'];
  77.     elseif ($context=='resource'||$context=='view') $title=cfUTF8Encode(cfRGetVar('name'));
  78.     else $title=cfGGetVar('pageTitle');
  79.     echo '<title>'.$title.'</title>'."\n";
  80.  
  81.     // Theme
  82.     echo '<link rel="stylesheet" type="text/css" media="all" href="/themes/mobile/theme.css?v='.cfGGetVar('appVersion').'&browser='.cfBGetVar('name')."\">\n";
  83.     if(cfBGetVar('mobileTheme')) echo '<link rel="stylesheet" media="all" type="text/css" href="/themes/mobile/'.cfBGetVar('mobileTheme').'/theme.css?v='.cfGGetVar('appVersion')."\">\n";
  84.     //if(cfBGetVar('name')=='iPhone') echo '<link rel="stylesheet" media="all" type="text/css" href="/themes/mobile/IEMobile/theme.css?v='.cfGGetVar('appVersion').'&rnd='.rand()."\">\n";
  85.  
  86.     // Common js functions
  87.     if(!cfBGetVar('inlineJS')) echo cfScriptLink('mCommon.js');
  88.  
  89.     // Javascript
  90.     ?><script type="text/javascript" language="javascript"><?php
  91.  
  92.     if(cfBGetVar('name')=='iPhone') echo 'setTimeout("D.body.onload=window.scrollTo(0,1)",10);';
  93.  
  94.     if(cfBGetVar('inlineJS')) echo file_get_contents(cfAppDocRoot().'/js/mCommon.js'); // inline javascript (IE Mobile 5)
  95.  
  96.     // insert javascript resource id (used by async requests)
  97.     if(substr($_SERVER['PHP_SELF'],0,5)=='/res/' && isset($_SESSION['activeResourceId'])) echo 'var resId="'.$_SESSION['activeResourceId']."\";\n";
  98.     // Extra javascript
  99.     if(isset($parameters['javascript'])) echo $parameters['javascript'];
  100.  
  101.     // Periodic server ping
  102.     if(!isset($parameters['ping']) || $parameters['ping']===true || ($parameters['ping']==='auto' &&
  103.     ($context=='resource' || $context=='view' || $_SERVER['SCRIPT_NAME']=='/index.php'))) {
  104.         echo "var pingInterval=".(max(cfGGetVar('clientPingInterval'),cfBGetVar('clientPingInterval'),10)*1000).";\n";
  105.         echo 'setTimeout("if(window.ping) ping("+pingInterval+")",pingInterval);';
  106.     }
  107.  
  108.     // iPhone orientation zoom adaptation script
  109.     if(!isset($parameters['noUpdateOrientation']) && cfBGetVar('name')=='iPhone'){?>
  110. function updateOrientation(){
  111.     if(window.orientation==undefined) return;
  112.     if(Math.abs(orientation)==90) {
  113.         dgn('viewport').setAttribute("content", "width=480, height=268, user-scalable=yes,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0");
  114.         D.body.style.height='268px';
  115.     }
  116.     else {
  117.         dgn('viewport').setAttribute("content", "width=320, height=416, user-scalable=yes,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0");
  118.         D.body.style.height='416px';
  119.     }
  120. }
  121.     <?php
  122.     }
  123.     ?></script><?php
  124.  
  125.     // Extra style
  126.     if(isset($parameters['style'])) echo "<style>\n".$parameters['style']."\n</style>\n";
  127.  
  128.     // Close head
  129.     if(!isset($parameters['bodyExtraHTML'])) $parameters['bodyExtraHTML']='';
  130.     if(cfBGetVar('name')=='iPhone') $parameters['bodyExtraHTML'].=' onorientationchange="if(W.updateOrientation) updateOrientation()"';
  131.     echo "</head><body ".$parameters['bodyExtraHTML'].">\n";
  132.  
  133.     // Asynchronous request through iframe (PSP)
  134.     if(cfBGetVar('ajax')==='iframe') echo '<iframe name="ajaxIFrame" style="visibility:hidden;width:1;height:1" border=0></iframe><form id="ajaxIFrameForm" style="display:none" method="POST" action="'.$_SERVER['PHP_SELF'].'" enctype="multipart/form-data" target="ajaxIFrame"><input name="XMLHttpScriptRequest"></form>';
  135.  
  136.     // Resource common top controls
  137.     if(!isset($parameters['noTopControls'])){
  138.         mfInsertTopControls(
  139.             $context,
  140.             isset($parameters['topControlsLabel'])?$parameters['topControlsLabel']:false,
  141.             isset($parameters['topControlsExtra'])?$parameters['topControlsExtra']:false
  142.         );
  143.     }
  144.  
  145.     // Send to browser
  146.     flush();
  147. }
  148.  
  149. /**
  150.  * @desc Insert HTML code for resources top controls
  151.  * @param $context: 'resource' (default), 'menu', 'view', 'login'
  152.  *
  153.  */
  154. function mfInsertTopControls($context='resource',$capt=false,$extra=false){
  155. ?>
  156. <table id="winBar" cellspacing=0 cellpadding=0>
  157. <colgroup><col width="1%"><col width="98%"><col width="1%"></colgroup><tr>
  158. <td id="wbI" style="white-space:nowrap">
  159. <?php
  160. // Top left
  161. if($context=='menu'||$context=='login') echo '<img src="'.outIcon('appIcon32mobile').'" height="32" width="32"/>'."\n";
  162. if($context=='view'||$context=='resource') echo mfButton(false,"/index.php",outIcon("home"))."\n";
  163. if($context=='view') echo ' '.mfButton(false,'javascript:mwl.liSel(this);document.location=\'/res/'.cfRGetVar('type').'/'.cfRGetVar('subType').'/index.php?resId='.$_SESSION['activeResourceId'].'\'',cfRGetVar('resourceIcon'))."\n";
  164. ?>
  165. </td>
  166. <td id="wbC"><?php
  167. // Main caption
  168. if($capt!==false) echo $capt;
  169. elseif ($context=='login') echo cfCaption('loginSelectAccount');
  170. elseif ($context=='menu') echo cfCaption('genResources');
  171. else echo ' ';
  172. ?>
  173. </td><td id="wbE"><?php
  174.     // Extra buttons
  175.     if($extra!==false) echo $extra;
  176.     // Logout button
  177.     elseif ($context=='menu')echo mfButton(false,'javascript:document.logoutForm.submit()',outIcon('logout'));
  178. ?></td></tr></table>
  179. <?php
  180. }
  181.  
  182. /**
  183.  * @desc Display a page indicating that resource is not compatible with mobile browsers
  184.  *
  185.  */
  186. function mfDisplayResourceNotCompatiblePage(){
  187.     mfInsertHead();
  188.     echo '<table style="height:70%;width:100%"><tr valign="middle"><td valign="middle" align="center">'.outImage(outIcon('mobileNo')).'</td></tr></table></body></html>';
  189.     exit;
  190. }
  191.  
  192. /**
  193.  * @return string: code
  194.  * @param string $caption : button's caption (utf-8 encoded)
  195.  * @param string $action : optional : action (href)
  196.  * @param string $imgSrc : optional : path to button's image
  197.  * @param string $extraHTML : optional : extra HTML code included in button definition
  198.  * @param string $state: false: normal, 'disabled' or 'on'
  199.  * @desc  Insert HTML code for a button
  200. */
  201. function mfButton($caption,$href='#',$imgSrc=false,$extraHTML=false,$state=false){
  202.     //Format : <a class="button"><img src="icon"/>text</a>
  203.     $output='<a '.$extraHTML.' class="';
  204.     if($state=='on') $output.='btSel';
  205.     elseif($state=='disabled') $output.='btDisabled';
  206.     else $output.='bt';
  207.     $output.='" href="';
  208.     if($state=='disabled') {
  209.         if(substr($href,0,11)=='javascript:') $output.='javascript://'.substr($href,11);
  210.         else $output.='javascript://#'.$href;
  211.     }
  212.     else $output.=$href;
  213.     $output.='"><img src="'.(($imgSrc)?$imgSrc.'" class="ico"':'/gfx/v.gif"').' alt="" />';
  214.     if($caption) $caption='<span>'.$caption.'</span>';
  215.  
  216.     return $output.str_replace(' ',' ',$caption).'</a>';
  217. }
  218.  
  219. /**
  220.  * @desc Return HTML code for list table definition
  221.  *
  222.  * @param $extraHTML
  223.  * @return string HTMl code
  224.  */
  225. function mfListTable($extraHTML=''){return '<table class="liTable" cellspacing=0 cellpadding=0 '.$extraHTML.'><colgroup><col width="1"><col width="*"><col width="1">';}
  226.  
  227. /**
  228.  * @desc List item HTML
  229.  *
  230.  * @param string $extraHTML: HTML inserted into (topmost) tr element
  231.  * @param string $lContent: left-side HTML
  232.  * @param string $lAction: HTML inserted into left td
  233.  * @param string $cContent: central HTML
  234.  * @param string $cAction: HTML inserted into central td
  235.  * @param string $rContent: right-side HTML
  236.  * @param string $rAction: HTML inserted into right td
  237.  * @return string HTML code
  238.  */
  239. function mfListItem($extraHTML,$lContent,$lAction=false,$cContent=false,$cAction=false,$rContent='',$rAction=false){
  240.     if(strpos($extraHTML,'class=')!==false) $output='<tr '.$extraHTML.'>'; else $output='<tr class="li" '.$extraHTML.'>';
  241.     $output.='<td class="lil" '.$lAction.'>'.$lContent.'</td>';
  242.     if($rContent){
  243.         $output.='<td class="lic" '.$cAction.'>'.$cContent.'</td>';
  244.         $output.='<td class="lir" '.$rAction.'>'.$rContent.'</td>';
  245.     }
  246.     else $output.='<td class="lir" colspan="2" '.$cAction.' style="text-align:left">'.$cContent.'</td>';
  247.     return $output."</tr>";
  248. }
  249.  
  250. /**
  251.  * @desc Return a list item spacer
  252.  *
  253.  * @return string HTML code
  254.  */
  255. function mfListSpacer($caption=false){
  256.     if(!$caption) return mfListItem('class="liSpacer"','');
  257.     return '<tr><td colspan="3" style="height:1.6em;vertical-align:bottom" class="lit">'.$caption.'</td></tr>';
  258. }
  259. ?>